package leetcode_jz_offer.day11_list;

/**
 * @author 美女
 * @date 2022/07/25 15:20
 **/
public class Num22_链表中倒数第k个结点 {
    private class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }
    //快慢指针，快指针先走k部，注意k大于链表长度情况
    public ListNode getKthFromEnd(ListNode head, int k) {
        if(k<=0||head==null){
            return null;
        }
        ListNode fast=head;
        ListNode slow=head;
        //快指针走k步，要注意fast==null但k还没归零的情况,此时k大于链表长度
        while(k>0&&fast!=null){
            fast=fast.next;
            k--;
        }
        //出循环两种情况，k=0或者k!=0但是fast为空了
        //k=0时，fast不为空，才可以进入下列循环
        while(fast!=null){
            fast=fast.next;
            slow=slow.next;
        }
        return k>0?null:slow;
    }
}
